home *** CD-ROM | disk | FTP | other *** search
/ Shareware Grab Bag / Shareware Grab Bag.iso / 001 / gt700.arc / GT-UTIL.PAS < prev    next >
Encoding:
Pascal/Delphi Source File  |  1986-07-13  |  12.5 KB  |  346 lines

  1. {$C-,V-,K-,R-,U-}
  2. (****************************************************************************)
  3. (*                                                                          *)
  4. (*       This program is the GT-UTIL program.  It will do several           *)
  5. (*       utility functions with the Phone Directory as follows:             *)
  6. (*                                                                          *)
  7. (*       1.   Convert pre GT 4.20 directories to new format.                *)
  8. (*       2.   List directory to the system printer.                         *)
  9. (*       3.   Import text listing of BBS into GT directory format.          *)
  10. (*                                                                          *)
  11. (****************************************************************************)
  12.  
  13. program
  14.    gt_util;
  15.  
  16.    procedure
  17.       reformat;
  18.    {
  19.       This procedure is intended to be used to upgrade old versions of the GT
  20.       phone directory to the new improved style.  The program renames the old
  21.       directory to OLD_GT.DIR and the new directory becomes GT.DIR, ready to
  22.       use with GT v4.20 or later.
  23.    }
  24.    type
  25.       odialrec   = record
  26.                       name     : string[30];
  27.                       number   : string[30];
  28.                       baud     : integer;
  29.                       parity   : integer;
  30.                       databits : integer;
  31.                       stopbits : integer;
  32.                    end;
  33.       ndialrec   = record
  34.                       redial   : char;
  35.                       name     : string[30];
  36.                       number   : string[14];
  37.                       date     : string[8];
  38.                       time     : string[5];
  39.                       baud     : integer;
  40.                       parity   : integer;
  41.                       databits : integer;
  42.                       stopbits : integer;
  43.                    end;
  44.       odialarray = record
  45.                       no       : integer;
  46.                       entries  : array[ 1..16 ] of odialrec;
  47.                    end;
  48.       ndialarray = record
  49.                       no       : integer;
  50.                       entries  : array[ 1..16 ] of ndialrec;
  51.                    end;
  52.  
  53.    var
  54.       ofile   : file of odialarray;
  55.       nfile   : file of ndialarray;
  56.       odir    : odialarray;
  57.       ndir    : ndialarray;
  58.       i,j,k   : integer;
  59.       s       : string[255];
  60.  
  61.    begin
  62.       writeln;
  63.       writeln('***********************************************************************');
  64.       writeln('*    Make sure the old phone directory is in the default directory    *');
  65.       writeln('*    and default drive, then press <enter> when ready to begin or     *');
  66.       writeln('*    type "exit" followed by <enter> to quit.                         *');
  67.       writeln('***********************************************************************');
  68.       writeln;
  69.       s[0] := #00;
  70.       readln(s);
  71.       IF ((s = 'exit') OR (s = 'EXIT')) then
  72.          exit;
  73.       assign(ofile,'GT.DIR');
  74.       rename(ofile,'OLD_GT.DIR');
  75.       reset(ofile);
  76.       assign(nfile,'GT.DIR');
  77.       rewrite(nfile);
  78.       i := filesize(ofile);
  79.       for j:=0 to pred(i) do begin
  80.          seek(ofile,j);
  81.          read(ofile,odir);
  82.          ndir.no := odir.no;
  83.          for k:=1 to 16 do begin
  84.             ndir.entries[k].redial   := ' ';
  85.             ndir.entries[k].date     := '';
  86.             ndir.entries[k].time     := '';
  87.             ndir.entries[k].name     := odir.entries[k].name;
  88.             ndir.entries[k].number   := odir.entries[k].number;
  89.             ndir.entries[k].baud     := odir.entries[k].baud;
  90.             ndir.entries[k].parity   := odir.entries[k].parity;
  91.             ndir.entries[k].databits := odir.entries[k].databits;
  92.             ndir.entries[k].stopbits := odir.entries[k].stopbits;
  93.          end;
  94.          write(nfile,ndir);
  95.       end;
  96.       close(nfile);
  97.       close(ofile);
  98.    end;
  99.  
  100.    procedure
  101.       printout;
  102.    type
  103.       dialrec   = record
  104.                      redial   : char;
  105.                      name     : string[30];
  106.                      number   : string[14];
  107.                      date     : string[8];
  108.                      time     : string[5];
  109.                      baud     : integer;
  110.                      parity   : integer;
  111.                      databits : integer;
  112.                      stopbits : integer;
  113.                   end;
  114.       dialarray = record
  115.                      no       : integer;
  116.                      entries  : array[ 1..16 ] of dialrec;
  117.                   end;
  118.    const
  119.       pt      : array[0..2] of char = ('N','E','O');
  120.       blanks  = '                                          ';
  121.  
  122.    var
  123.       dfile    : file of dialarray;
  124.       ddir     : dialarray;
  125.       i,j,k    : integer;
  126.       s        : string[80];
  127.       pname    : string[50];
  128.       dname    : string[50];
  129.       prt_file : text;
  130.  
  131.    begin
  132.       writeln;
  133.       writeln('***********************************************************************');
  134.       writeln('*    Make sure the phone directory is in the default directory and    *');
  135.       writeln('*    default drive, then press <enter> when ready to begin or type    *');
  136.       writeln('*    "exit" followed by <enter> to quit.   If you wish the output     *');
  137.       writeln('*    to go to a file, instead of the printer, enter the filename.     *');
  138.       writeln('***********************************************************************');
  139.       writeln;
  140.       s[0] := #00;
  141.       readln(s);
  142.       IF ((s = 'exit') OR (s = 'EXIT')) then
  143.          exit;
  144.       IF (s[0] = #00) THEN
  145.          pname := 'LST:'
  146.       ELSE
  147.          pname := s;
  148.       writeln;
  149.       writeln('*****************************************************************');
  150.       writeln('*    Type the name of the directory to be printed, or "exit"    *');
  151.       writeln('*    to quit, followed by <enter>.                              *');
  152.       writeln('*****************************************************************');
  153.       writeln;
  154.       s[0] := #00;
  155.       readln(s);
  156.       IF ((s = 'exit') OR (s = 'EXIT')) then
  157.          exit;
  158.       i := pos('.',s);
  159.       IF (i > 0) THEN
  160.          s[0] := CHR(Pred(i));
  161.       IF (s[0] = #00) THEN
  162.          dname := 'GT.DIR'
  163.       ELSE
  164.          dname := s+'.DIR';
  165.       assign(dfile,dname);
  166.       reset(dfile);
  167.       assign(prt_file,pname);
  168.       rewrite(prt_file);
  169.       i := filesize(dfile);
  170.       for j:=0 to pred(i) do begin
  171.          seek(dfile,j);
  172.          read(dfile,ddir);
  173.          for k:=1 to ddir.no do begin
  174.             with ddir.entries[k] do begin
  175.                s := copy(name+blanks,1,31);
  176.                write(prt_file,s);
  177.                s := copy(number+blanks,1,15);
  178.                write(prt_file,s);
  179.                writeln(prt_file,date,
  180.                        ' ',time,
  181.                        ' ',baud:4,
  182.                        ' ',pt[parity],
  183.                        ' ',databits,
  184.                        ' ',stopbits);
  185.             end;
  186.          end;
  187.       end;
  188.       close(dfile);
  189.       close(prt_file);
  190.    end;
  191.  
  192.    procedure
  193.       import;
  194.    type
  195.       dialrec   = record
  196.                      redial   : char;
  197.                      name     : string[30];
  198.                      number   : string[14];
  199.                      date     : string[8];
  200.                      time     : string[5];
  201.                      baud     : integer;
  202.                      parity   : integer;
  203.                      databits : integer;
  204.                      stopbits : integer;
  205.                   end;
  206.       dialarray = record
  207.                      no       : integer;
  208.                      entries  : array[ 1..16 ] of dialrec;
  209.                   end;
  210.    const
  211.       maxaccum = 5;
  212.    var
  213.       dfile    : file of dialarray;
  214.       ddir     : dialarray;
  215.       i,j,k    : integer;
  216.       s        : string[255];
  217.       t        : char;
  218.       accum    : array[0..5] of string[255];
  219.       pname    : string[50];
  220.       inp_file : text;
  221.       cont     : boolean;
  222.    begin
  223.       writeln;
  224.       writeln('***********************************************************************');
  225.       writeln('*    Enter "exit" followed by <enter> to quit.   To continue enter    *');
  226.       writeln('*    the name of the ASCII input file at this time.                   *');
  227.       writeln('***********************************************************************');
  228.       writeln;
  229.       s[0] := #00;
  230.       readln(s);
  231.       IF ((s = 'exit') OR (s = 'EXIT') OR (s = '')) then
  232.          exit;
  233.       assign(inp_file,s);
  234.       reset(inp_file);
  235.       writeln;
  236.       writeln('*************************************************************************');
  237.       writeln('*    Enter "exit" followed by <enter> to quit.   To continue enter      *');
  238.       writeln('*    the name of the output file at this time, (GT format directory).   *');
  239.       writeln('*    WARNING: The existing contents of the output file will be lost!    *');
  240.       writeln('*************************************************************************');
  241.       writeln;
  242.       s[0] := #00;
  243.       readln(s);
  244.       IF ((s = 'exit') OR (s = 'EXIT') OR (s = '')) then begin
  245.          close(inp_file);
  246.          exit;
  247.       end;
  248.       assign(dfile,s);
  249.       rewrite(dfile);
  250.       ddir.no := 0;
  251.       WHILE (NOT eof(inp_file)) do begin
  252.           readln(inp_file,s);
  253.           ddir.no := Succ(ddir.no);
  254.           IF (ddir.no > 16) THEN BEGIN
  255.              ddir.no := 16;
  256.              write(dfile,ddir);
  257.              ddir.no := 1;
  258.           END;
  259.           While ((s[1] in [' ','.']) AND (s[0] > #00)) do
  260.              delete(s,1,1);
  261.           with ddir.entries[ddir.no] do begin
  262.              redial := ' ';
  263.              name := '';
  264.              number := '';
  265.              date := '';
  266.              time := '';
  267.              baud := 1200;
  268.              parity := 0;
  269.              databits := 8;
  270.              stopbits := 1;
  271.              for k:=0 to maxaccum do
  272.                 accum[k] := '';
  273.              k := 0;
  274.              WHILE ((k <= maxaccum) AND (s[0] > #00)) do begin
  275.                 cont := true;
  276.                 While (cont) do begin
  277.                    accum[k] := accum[k] + s[1];
  278.                    t := s[1];
  279.                    delete(s,1,1);
  280.                    IF (s[0] = #00) then
  281.                       cont := false
  282.                    else
  283.                       If (s[0] < #03) then
  284.                          cont := true
  285.                       else
  286.                          if ((s[1]=' ') and (accum[k][1] in ['1'..'9','('])) then
  287.                             cont := false
  288.                          else
  289.                             if ((s[1] in ['_',' ','.']) and (s[2] = s[1])) then
  290.                                cont := false
  291.                             else
  292.                                if ((s[1] in ['!','#','*','@']) and (t in ['0'..'9','('])) then
  293.                                   cont := false;
  294.                 end;
  295.                 k := succ(k);
  296.                 while ((s[0] > #00) and (NOT (s[1] in ['a'..'z','A'..'Z','0'..'9','(']))) do
  297.                    delete(s,1,1);
  298.              end;
  299.              k := 0;
  300.              cont := true;
  301.              while ((cont) and (k <= maxaccum)) do begin
  302.                 if accum[k][0] > #00 then begin
  303.                    if (accum[k][1] in ['0'..'9','(']) then begin
  304.                       number := copy(accum[k],1,14);
  305.                       cont := false;
  306.                       if (k = 0) then
  307.                          k := 1
  308.                       else
  309.                          k := 0;
  310.                       FOR i:=2 TO maxaccum DO begin
  311.                          IF (accum[i][0] > #00) THEN
  312.                          accum[k] := accum[k] + '-' + accum[i];
  313.                       end;
  314.                       name := copy(accum[k],1,30);
  315.                    end;
  316.                 end;
  317.                 k := succ(k);
  318.              end;
  319.           end;
  320.       end;
  321.       IF (ddir.no > 0) THEN
  322.          write(dfile,ddir);
  323.       close(dfile);
  324.       close(inp_file);
  325.    end;
  326.  
  327. var
  328.    i  : integer;
  329.  
  330. begin
  331.    writeln;
  332.    writeln('*************************** MENU *******************************');
  333.    writeln('*     1.  Convert Pre 4.20 Phone Directory to New Format.      *');
  334.    writeln('*     2.  Print Phone Directory to a file or System Printer.   *');
  335.    writeln('*     3.  Import Text List to Phone Directory Format.          *');
  336.    writeln('****************************************************************');
  337.    writeln;
  338.    write('     Enter the number of your selection: ');
  339.    readln(i);
  340.    case i of
  341.       1 : reformat;
  342.       2 : printout;
  343.       3 : import;
  344.    end;
  345. end.
  346.